{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 直接用CNN方案来进行优化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ../train-images-idx3-ubyte.gz\n",
      "Extracting ../train-labels-idx1-ubyte.gz\n",
      "Extracting ../t10k-images-idx3-ubyte.gz\n",
      "Extracting ../t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000, 10)\n",
      "(5000, 784)\n",
      "(5000, 10)\n",
      "(10000, 784)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"../\", one_hot=True)\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义图\n",
    "\n",
    "# 占位符\n",
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"float\", [None, 10])\n",
    "learning_rate = tf.placeholder(\"float\")\n",
    "\n",
    "# 初始化函数\n",
    "def initialize(shape):\n",
    "    return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "# 神经网络\n",
    "def weight_variable(shape):\n",
    "    initial = tf.truncated_normal(shape, stddev=0.1)\n",
    "    return tf.Variable(initial)\n",
    "\n",
    "def bias_variable(shape):\n",
    "    initial = tf.constant(0.1, shape=shape)\n",
    "    return tf.Variable(initial)\n",
    "\n",
    "def conv2d(x, W):\n",
    "    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')\n",
    "\n",
    "def max_pool_2_2(x):\n",
    "    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')\n",
    "\n",
    "# 第一层卷积\n",
    "# 定义参数\n",
    "W_conv1 = weight_variable([5, 5, 1, 32])\n",
    "b_conv1 = bias_variable([32])\n",
    "# 输入参数\n",
    "image = tf.reshape(x, [-1, 28, 28, 1])\n",
    "# 卷积激活\n",
    "h_conv1 = tf.nn.relu(conv2d(image, W_conv1) + b_conv1)\n",
    "# 池化\n",
    "h_pool1 = max_pool_2_2(h_conv1)\n",
    "\n",
    "# 第二层卷积\n",
    "W_conv2 = weight_variable([5, 5, 32, 64])\n",
    "b_conv2 = bias_variable([64])\n",
    "h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)\n",
    "h_pool2 = max_pool_2_2(h_conv2)\n",
    "\n",
    "# 密集连接层\n",
    "W_fc1 = weight_variable([7*7*64, 1024])\n",
    "b_fc1 = bias_variable([1024])\n",
    "h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])\n",
    "h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)\n",
    "\n",
    "# dropout层\n",
    "keep_prob = tf.placeholder('float')\n",
    "h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)\n",
    "\n",
    "# 输出层\n",
    "W_fc2 = weight_variable([1024, 10])\n",
    "b_fc2 = bias_variable([10])\n",
    "y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2\n",
    "\n",
    "# 定义损失函数\n",
    "cross_entropy_loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_conv))\n",
    "\n",
    "# 优化器\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cross_entropy_loss)\n",
    "\n",
    "# 输出值\n",
    "# pred = tf.nn.softmax(logits)\n",
    "# y = tf.cast(y, tf.int64)\n",
    "pred = tf.nn.softmax(y_conv)\n",
    "correct_pred = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y, 1))  # tf.argmax 0按列，1按行，返回index，index是整形\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))\n",
    "\n",
    "# batch, epoch\n",
    "batch_size = 50\n",
    "trainig_step = 3000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 1.35608, the validation accuracy is 0.8016\n",
      "after 200 training steps, the loss is 0.562562, the validation accuracy is 0.8922\n",
      "after 300 training steps, the loss is 0.453928, the validation accuracy is 0.9186\n",
      "after 400 training steps, the loss is 0.205966, the validation accuracy is 0.9224\n",
      "after 500 training steps, the loss is 0.21695, the validation accuracy is 0.9394\n",
      "after 600 training steps, the loss is 0.502683, the validation accuracy is 0.9454\n",
      "after 700 training steps, the loss is 0.135501, the validation accuracy is 0.949\n",
      "after 800 training steps, the loss is 0.144519, the validation accuracy is 0.9502\n",
      "after 900 training steps, the loss is 0.235396, the validation accuracy is 0.9576\n",
      "after 1000 training steps, the loss is 0.222015, the validation accuracy is 0.9602\n",
      "after 1100 training steps, the loss is 0.264465, the validation accuracy is 0.962\n",
      "after 1200 training steps, the loss is 0.236574, the validation accuracy is 0.9674\n",
      "after 1300 training steps, the loss is 0.299516, the validation accuracy is 0.9652\n",
      "after 1400 training steps, the loss is 0.180188, the validation accuracy is 0.9672\n",
      "after 1500 training steps, the loss is 0.0646636, the validation accuracy is 0.9712\n",
      "after 1600 training steps, the loss is 0.213194, the validation accuracy is 0.9734\n",
      "after 1700 training steps, the loss is 0.097891, the validation accuracy is 0.972\n",
      "after 1800 training steps, the loss is 0.199565, the validation accuracy is 0.9712\n",
      "after 1900 training steps, the loss is 0.180384, the validation accuracy is 0.9766\n",
      "after 2000 training steps, the loss is 0.17296, the validation accuracy is 0.977\n",
      "after 2100 training steps, the loss is 0.193448, the validation accuracy is 0.9762\n",
      "after 2200 training steps, the loss is 0.134184, the validation accuracy is 0.9766\n",
      "after 2300 training steps, the loss is 0.115691, the validation accuracy is 0.9764\n",
      "after 2400 training steps, the loss is 0.0148026, the validation accuracy is 0.9778\n",
      "after 2500 training steps, the loss is 0.17993, the validation accuracy is 0.978\n",
      "after 2600 training steps, the loss is 0.170793, the validation accuracy is 0.9784\n",
      "after 2700 training steps, the loss is 0.100143, the validation accuracy is 0.9786\n",
      "after 2800 training steps, the loss is 0.0728545, the validation accuracy is 0.9814\n",
      "after 2900 training steps, the loss is 0.0914147, the validation accuracy is 0.9818\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9799\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    \n",
    "    # 定义验证集和测试集\n",
    "    validate_data = {x: mnist.validation.images, y: mnist.validation.labels}\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "    \n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run([optimizer, cross_entropy_loss], feed_dict={x: xs, y: ys, learning_rate: 1e-4, keep_prob:0.5})\n",
    "        \n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict={x: mnist.validation.images, y: mnist.validation.labels, keep_prob: 1.})\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels, keep_prob: 1.})\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-2900\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x1152 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16],\n",
    "                keep_prob: 1.\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(16, 16))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('[{}]-[{:.1f}%]'.format(order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
